/**
 * 远程验证期号指令
 * 对动态生成的表单，如果是disabled，那么不进行验证。
 * 但由于未知原因，只要有一个添加了$asyncValidators,另外一组表单的相同位置，无论是否disabled,都会执行这个验证。
 * 因此废弃远程验证的方式。
 */
define([
    "app"
], function (app) {
    app.directive("attendanceNumberValidate", [
        "$timeout",
        "$q",
        "attendanceNumberDataService",
        function ($timeout,$q,attendanceNumberDataService) {
            return {
                restrict: "A",
                require: "ngModel",
                link: function (scope, el, attrs, ctrl) {

                    attrs.$observe("disabled",function (newValue) {

                        console.log(newValue);

                        if(newValue === true) {
                            return;
                        }

                        ctrl.$asyncValidators.exists = function (modelValue, viewValue) {

                            var value = modelValue || viewValue;
                            var deferred = $q.defer();

                            attendanceNumberDataService
                                .validateAttendanceNumber(value)
                                .then(
                                    function success(resp) {
                                        if(resp.data.exists) {
                                            deferred.reject(false);
                                        }
                                        deferred.resolve(true);
                                    }
                                );
                            return deferred.promise;
                        }
                    });

                }
            }
        }
    ])
});